home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1997 #3
/
Amiga Plus CD - 1997 - No. 03.iso
/
pd
/
programmierung
/
alienbreed3d2_src
/
cheesesauce
/
anims.demo
< prev
next >
Wrap
Text File
|
1997-01-31
|
16KB
|
1,062 lines
brightanim:
move.l branimpt,a0
move.w (a0),d0
; move.w d0,ZoneDat24+6
sub.w #10,d0
asr.w #1,d0
add.w #10,d0
; move.w d0,ZoneDat23+6
; move.w d0,ZoneDat23+6
sub.w #1,branimcount
bgt.s nonextbr
adda.w #4,a0
cmp.l #endbranim,a0
blt.s notrestartbr
move.l #branim,a0
notrestartbr
move.l a0,branimpt
move.w 2(a0),branimcount
nonextbr:
rts
branimpt: dc.l branim
branimcount: dc.w 0
branim:
dc.w 10,1
dc.w -15,1
dc.w 10,3
dc.w -15,1
dc.w 10,4
dc.w -15,1
dc.w 10,1
dc.w -15,2
dc.w 10,2
dc.w -8,1
dc.w 10,1
dc.w -5,1
dc.w 10,2
dc.w -15,1
dc.w 10,2
endbranim
objvels: ds.l 8
Robotanimpos:
dc.w 0
Robotarmpos
dc.w 0
clump: dc.w 0
RobotWalk:
move.l #RobotPts+2,a0
move.l #Robotanim,a1
move.w Robotanimpos(pc),d0
clr.b clump
adda.w d0,a1
move.w #(38*3)-1,d0
putinpts:
move.w (a1)+,(a0)+
dbra d0,putinpts
move.l #RightArm,a0
move.l #Armanim,a1
move.w Robotarmpos(pc),d0
adda.w d0,a1
move.w #(14*3)-1,d0
putinpts2:
move.w (a1)+,(a0)+
dbra d0,putinpts2
move.l #Robot_MainBody,a0
move.l #BodyPlace+2,a1
move.w (a0)+,d0
move.w RobotPts+4+14*6,d1
add.w RobotPts+4+22*6,d1
asr.w #1,d1
putinheights:
move.w (a0)+,d2
add.w d1,d2
move.w d2,(a1)
addq #6,a1
dbra d0,putinheights
move.w visxpos,d0
add.w visxdir,d0
cmp.w #24,d0
blt.s okvisr
move.w #-4,visxdir
okvisr
cmp.w #-24,d0
bgt.s okvisl
move.w #4,visxdir
okvisl:
move.w d0,visxpos
move.l #VISOR,a0
add.w #64,d0
move.b d0,6(a0)
move.b d0,18(a0)
move.b d0,22(a0)
add.b #63,d0
move.b d0,10(a0)
move.b d0,14(a0)
rts
visxpos: dc.w 0
visxdir: dc.w 4
FramesToDraw: dc.w 0
TempFrames: dc.w 0
objmoveanim:
move.l PLR1_Roompt,a0
move.w (a0),PLR1_Zone
move.l PLR2_Roompt,a0
move.w (a0),PLR2_Zone
bsr DoorRoutine
bsr LiftRoutine
bsr ObjectHandler
bsr PlayerShot
bsr RobotWalk
subq.w #1,animtimer
bgt.s notzero
move.w #2,animtimer
move.l otherrip,d0
move.l RipTear,otherrip
move.l d0,RipTear
notzero:
rts
******************************
tstdir: dc.w 0
liftheighttab: ds.w 20
doorheighttab: ds.w 20
LiftRoutine:
move.l #LiftData,a0
move.l #liftheighttab,a6
doalift:
move.w (a0)+,d0 ; bottom of lift movement
cmp.w #999,d0
bne notallliftsdone
rts
notallliftsdone:
move.w (a0)+,d1 ; top of lift movement.
move.w (a6)+,d3
move.w 2(a0),d2
move.w d3,(a0)+
move.l a0,a5
move.w d2,(a0)+
move.l (a0)+,a1
asr.w #2,d3
move.w d3,d0
asl.w #2,d0
move.w d0,2(a1)
move.w d3,d0
muls #256,d3
move.l (a0)+,a1
move.w -2(a1),d5
move.l PLR1_Roompt,a3
move.l d3,(a1)
and.w #63,d0
neg.w d0
add.w #64,d0
cmp.w (a3),d5
bne.s .notstoodonlift
move.b (a0)+,d1 ; events
move.b (a0)+,d2 ; conditions
and.b Conditions,d2
cmp.b -1(a0),d2
bra.s .dothesimplething
move.w d7,(a5)
move.w #0,Noisex
move.w #0,Noisez
move.w #50,Noisevol
move.w #5,Samplenum
move.b #1,chanpick
st notifplaying
movem.l a0/a3/d0/d1/d2/d3/d6/d7,-(a7)
jsr MakeSomeNoise
movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6/d7
bra.s .dothesimplething
.notstoodonlift:
move.b (a0)+,d1 ; events
move.b (a0)+,d2 ; conditions
and.b Conditions,d2
cmp.b -1(a0),d2
beq.s .satisfied
.dothesimplething:
move.l #FloorLines,a3
.simplecheck:
move.w (a0)+,d5
blt nomoreliftwalls
asl.w #5,d5
lea (a3,d5.w),a4
move.w #0,30(a4)
move.l (a0)+,a1
move.l (a0)+,a2
adda.w d0,a2
move.l a2,10(a1)
move.l d3,20(a1)
move.l d3,16(a4)
bra.s .simplecheck
bra nomoreliftwalls
.satisfied:
move.l #FloorLines,a3
liftwalls:
move.w (a0)+,d5
blt nomoreliftwalls
asl.w #5,d5
lea (a3,d5.w),a4
move.b 30(a4),d4
move.w #0,30(a4)
and.b d1,d4
beq.s .nothinghit
move.w d7,(a5)
move.w #0,Noisex
move.w #0,Noisez
move.w #50,Noisevol
move.w #5,Samplenum
move.b #1,chanpick
st notifplaying
movem.l a0/a3/a4/d0/d1/d2/d3/d6/d7,-(a7)
jsr MakeSomeNoise
movem.l (a7)+,a0/a3/a4/d0/d1/d2/d3/d6/d7
.nothinghit:
move.l (a0)+,a1
move.l (a0)+,a2
adda.w d0,a2
move.l a2,10(a1)
move.l d3,20(a1)
move.l d3,16(a4)
bra liftwalls
nomoreliftwalls
bra doalift
rts
animtimer: dc.w 2
doordir: dc.w -1
doorpos: dc.w -9
DoorRoutine:
move.l #doorheighttab,a6
move.l #DoorData,a0
doadoor:
move.w (a0)+,d0 ; bottom of door movement
cmp.w #999,d0
bne notalldoorsdone
rts
notalldoorsdone:
move.w (a0)+,d1 ; top of door movement.
move.w (a6)+,d3
move.w d3,(a0)+
move.l a0,a5
move.w d2,(a0)+
move.l (a0)+,a1
asr.w #2,d3
move.w d3,d0
asl.w #2,d0
move.w d0,2(a1)
move.w d3,d0
muls #256,d3
move.l (a0)+,a1
move.l d3,(a1)
and.w #63,d0
neg.w d0
add.w #64,d0
move.b (a0)+,d1 ; events
move.b (a0)+,d2 ; conditions
and.b Conditions,d2
dothesimplething:
move.l #FloorLines,a3
simplecheck:
move.w (a0)+,d5
blt nomoredoorwalls
asl.w #5,d5
lea (a3,d5.w),a4
move.w #0,30(a4)
move.l (a0)+,a1
move.l (a0)+,a2
adda.w d0,a2
move.l a2,10(a1)
move.l d3,24(a1)
move.l d3,20(a4)
bra.s simplecheck
bra nomoredoorwalls
alreadygoingup:
move.w (a0)+,d1
bra dothesimplething
satisfied:
move.l #FloorLines,a3
doorwalls:
move.w (a0)+,d5
blt.s nomoredoorwalls
asl.w #5,d5
lea (a3,d5.w),a4
move.b 30(a4),d4
move.w #0,30(a4)
and.b d1,d4
beq.s nothinghit
move.w #-16,(a5)
move.w #0,Noisex
move.w #0,Noisez
move.w #50,Noisevol
move.w #5,Samplenum
move.b #1,chanpick
st notifplaying
movem.l a0/a3/d0/d1/d2/d3/d6,-(a7)
jsr MakeSomeNoise
movem.l (a7)+,a0/a3/d0/d1/d2/d3/d6
nothinghit:
move.l (a0)+,a1
move.l (a0)+,a2
adda.w d0,a2
move.l a2,10(a1)
move.l d3,24(a1)
move.l d3,20(a4)
bra.s doorwalls
nomoredoorwalls
bra doadoor
rts
tempGotBigGun: dc.w 0
tempGunDamage: dc.w 0
tempGunNoise: dc.w 1
tempxoff: dc.w 0
tempzoff: dc.w 0
tempRoompt: dc.l 0
PLR1_GotBigGun: dc.w 0
PLR1_GunDamage: dc.w 0
PLR1_GunNoise: dc.w 0
PLR2_GotBigGun: dc.w 0
PLR2_GunDamage: dc.w 0
PLR2_GunNoise: dc.w 0
bulyspd: dc.w 0
closedist: dc.w 0
ObsInLine:
ds.b 400
rotcount:
dc.w 0
shotvels: ds.l 20
PLR1_clicked: dc.b 0
PLR2_clicked: dc.b 0
popping: ds.l 5*4
targetydiff: dc.l 0
PlayerShot:
tst.b PLR1_clicked
beq PLR1_nofire
move.w PLR1_angpos,d0
move.l #SineTable,a0
lea (a0,d0.w),a0
move.w (a0),tempxdir
move.w 2048(a0),tempzdir
move.w PLR1_xoff,tempxoff
move.w PLR1_zoff,tempzoff
move.w PLR1_GunNoise,tempGunNoise
move.w PLR1_GotBigGun,tempGotBigGun
move.w PLR1_GunDamage,tempGunDamage
move.l PLR1_Roompt,tempRoompt
move.l #%10000001,d7
move.w #-1,d0
move.l #0,targetydiff
move.w #32767,d1
move.l #ObsInLine,a1
move.l #ObjectData,a0
move.l #ObjRotated,a2
findclosestinline
tst.w (a0)
blt.s outofline
tst.b (a1)+
beq.s notlinedup
tst.b 17(a0)
beq.s notlinedup
move.b 16(a0),d6
btst d6,d7
beq.s notlinedup
move.w (a0),d5
move.w 2(a2,d5.w*8),d6
cmp.w d6,d1
blt.s notlinedup
move.w d6,d1
; We have a closer enemy lined up.
move.w 4(a0),d6
ext.l d6
asl.l #7,d6
sub.l PLR1_yoff,d6
move.l d6,targetydiff
move.w d5,d0
notlinedup:
add.w #64,a0
bra findclosestinline
outofline:
move.w #0,bulyspd
tst.w d0
blt.s nothingtoshoot
move.l targetydiff,d7
sub.l #playerheight,d7
add.l #22*256,d7
move.w d1,closedist
asr.w #4,d1
tst.w d1
bgt.s okdistthing
moveq #1,d1
okdistthing
divs d1,d7
move.w d7,bulyspd
nothingtoshoot:
bsr pressedfire
PLR1_nofire:
tst.b PLR2_clicked
beq.s PLR2_nofire
move.w PLR2_angpos,d0
move.l #SineTable,a0
lea (a0,d0.w),a0
move.w (a0),tempxdir
move.w 2048(a0),tempzdir
move.w PLR2_xoff,tempxoff
move.w PLR2_zoff,tempzoff
move.w PLR2_GunNoise,tempGunNoise
move.w PLR2_GotBigGun,tempGotBigGun
move.w PLR2_GunDamage,tempGunDamage
move.l PLR2_Roompt,tempRoompt
bsr pressedfire
PLR2_nofire:
rts
tempangpos: dc.w 0
tempxdir: dc.w 0
tempzdir: dc.w 0
pressedfire:
move.w #0,d7
move.w #256,d6
move.w #256,d5
firefive:
move.l #PlayerShotData,a0
move.w #19,d1
.findonefree
move.w 12(a0),d0
blt.s .foundonefree
adda.w #64,a0
dbra d1,.findonefree
rts
.foundonefree:
move.w #0,Noisex
move.w #0,Noisez
move.w #50,Noisevol
move.w tempGunNoise,Samplenum
move.b #2,chanpick
clr.b notifplaying
move.b tempGotBigGun,shotsize(a0)
move.b tempGunDamage,shotpower(a0)
movem.l a0/d5/d6/d7,-(a7)
jsr MakeSomeNoise
movem.l (a7)+,a0/d5/d6/d7
move.l #ObjectPoints,a1
move.w (a0),d1
lea (a1,d1.w*8),a1
move.w tempxoff,(a1)
move.w tempzoff,4(a1)
move.w tempxdir,d0
ext.l d0
asl.l #4,d0
move.l d0,shotxvel(a0)
move.w tempzdir,d0
ext.l d0
asl.l #4,d0
move.l d0,shotzvel(a0)
move.w bulyspd,shotyvel(a0)
move.l #%10000001,EnemyFlags(a0)
move.l tempRoompt,a2
move.w (a2),12(a0)
move.l 2(a2),d0
sub.l #playerheight,d0
add.l #22*128,d0
move.l d0,accypos(a0)
asr.l #7,d0
move.w d0,4(a0)
add.w d6,tempangpos
neg.w d6
neg.w d5
add.w d5,d6
dbra d7,firefive
rts
duh: dc.w 0
double: dc.w 0
ivescreamed: dc.w 0
ObjectHandler:
move.l #ObjectData,a0
Objectloop:
tst.w (a0)
blt.s doneallobj
cmp.b #0,16(a0)
bne.s notnasty
bsr ItsANasty
notnasty:
cmp.b #1,16(a0)
bne.s notmedi
bsr ItsAMediKit
notmedi:
cmp.b #2,16(a0)
bne.s notbullet
bsr ItsABullet
notbullet:
cmp.b #3,16(a0)
bne.s notbiggun
bsr ItsABigGun
notbiggun:
cmp.b #4,16(a0)
bne.s notkey
bsr ItsAKey
notkey:
cmp.b #8,16(a0)
bne.s notmarine
bsr ItsAMarine
notmarine:
cmp.b #6,16(a0)
bne.s notRobot
bsr ItsARobot
notRobot:
cmp.b #7,16(a0)
bne.s notBigNasty
bsr ItsABigNasty
notBigNasty:
adda.w #64,a0
bra Objectloop
doneallobj:
rts
include "ab3:source/AI.s"
ItsAMarine:
move.w #15,Aggression
move.w #0,Movement
move.w #30,Cooperation
move.b #0,Ident
move.l #%1,enemies
move.l #%10100000,friends
st Armed
bsr AIControl
move.l objroom,a2
move.w 10(a2),2(a0)
move.l 2(a2),d0
sub.l #6400,d0
asr.l #7,d0
move.w d0,4(a0)
move.w #20*256,8(a0)
rts
ItsARobot:
; Head towards a control point, and
; once there, pick another one at
; random and go all the way there
; instead.
tst.w 12(a0)
blt .thisonedead
tst.b clump
beq.s .nosound
movem.l d0-d7/a0-a6,-(a7)
move.w (a0),d0
move.l #ObjRotated,a1
move.l (a1,d0.w*8),Noisex
move.w #400,Noisevol
move.w #7,Samplenum
move.b #1,chanpick
clr.b notifplaying
jsr MakeSomeNoise
movem.l (a7)+,d0-d7/a0-a6
.nosound:
move.w 12(a0),d2
move.l #ZoneAdds,a5
move.l (a5,d2.w*4),objroom
move.w CurrCPt(a0),d0
move.w TargCPt(a0),d1
jsr GetNextCPt
; d0 contains nearest CPt to go for.
move.l #CPtPos,a5
move.w (a5,d0.w*4),newx
move.w 2(a5,d0.w*4),newz
move.w (a0),d1
move.l #ObjectPoints,a1
lea (a1,d1.w*8),a1
move.w (a1),oldx
move.w 4(a1),oldz
move.w maxspd(a0),d2
muls TempFrames,d2
move.w d2,speed
move.w #20,Range
movem.l d0/a0/a1/a3/a4/d7,-(a7)
clr.b canshove
jsr HeadTowardsAng
move.w #%1000000000,wallflags
Jsr MoveObject
movem.l (a7)+,d0/a0/a1/a3/a4/d7
and.w #8191,Facing(a0)
move.w CosRet,d1
move.w SinRet,d2
move.w Facing(a0),d3
move.l #SineTable,a2
move.w 120(a2),d6
swap d6
clr.w d6
asr.l #1,d6
lea (a2,d3.w),a2
move.w (a2),d4 ; sin
move.w 2048(a2),d5 ; cos
muls d2,d5
muls d1,d4
moveq #0,d3
sub.l d5,d4
blt.s .turnrighty
.turnlefty:
cmp.l d4,d6
bgt.s .doneturn
move.w #-120,d3
bra.s .doneturn
.turnrighty:
neg.l d4
cmp.l d4,d6
bgt.s .doneturn
move.w #120,d3
.doneturn:
move.w #4,maxspd(a0)
muls 2048(a2),d1
muls (a2),d2
add.l d2,d1
cmp.l #$20000000,d1
bgt.s .canwalk
move.w #0,maxspd(a0)
add.w d3,d3
bne.s .canwalk
move.w #240,d3
.canwalk:
add.w Facing(a0),d3
and.w #8191,d3
move.w d3,Facing(a0)
move.l objroom,a2
move.w (a2),12(a0)
move.w newx,(a1)
move.w newz,4(a1)
tst.b GotThere
beq.s .notatnextptyet
move.w d0,CurrCPt(a0)
cmp.w TargCPt(a0),d0
bne.s .notatnextptyet
move.w nextCPt,d0
move.w d0,TargCPt(a0)
add.w #7,d0
cmp.w NumCPts,d0
blt.s .stillsomemore
sub.w NumCPts,d0
.stillsomemore:
move.w d0,nextCPt
.notatnextptyet:
move.w 10(a2),2(a0)
move.l 2(a2),d0
add.l #128*24,d0
asr.l #7,d0
move.w d0,targheight(a0)
move.w 4(a0),d1
cmp.w d0,d1
beq.s .okh
ble.s .godown
subq #8,d1
.godown
addq #4,d1
move.w d1,4(a0)
.okh:
.thisonedead:
rts
include "ab3:source/aliencontrol.demo"
nextCPt: dc.w 0
RipTear: dc.l 256*17*65536
otherrip: dc.l 256*18*65536
ItsAMediKit:
HealFactor EQU 18
move.w PLR1_xoff,oldx
move.w PLR1_zoff,oldz
move.w PLR1_Zone,d7
cmp.w 12(a0),d7
bne.s .NotSameZone
move.w (a0),d0
move.l #ObjectPoints,a1
move.w (a1,d0.w*8),newx
move.w 4(a1,d0.w*8),newz
move.l #50*50,d2
bsr CheckHit
tst.b hitwall
beq.s .NotPickedUp
move.w #0,Noisex
move.w #0,Noisez
move.w #50,Noisevol
move.w #4,Samplenum
move.b #2,chanpick
clr.b notifplaying
movem.l a0/a1/d2/d6/d7,-(a7)
jsr MakeSomeNoise
movem.l (a7)+,a0/a1/d2/d6/d7
move.w #-1,12(a0)
move.w HealFactor(a0),d0
add.w d0,Energy
.NotPickedUp:
.NotSameZone:
rts
ItsABigGun:
move.w PLR1_xoff,oldx
move.w PLR1_zoff,oldz
move.w PLR1_Zone,d7
cmp.w 12(a0),d7
bne .NotSameZone
move.w (a0),d0
move.l #ObjectPoints,a1
move.w (a1,d0.w*8),newx
move.w 4(a1,d0.w*8),newz
move.l #50*50,d2
bsr CheckHit
tst.b hitwall
beq.s .NotPickedUp
move.w #0,Noisex
move.w #0,Noisez
move.w #50,Noisevol
move.w #4,Samplenum
move.b #2,chanpick
clr.b notifplaying
movem.l a0/a1/d2/d6/d7,-(a7)
jsr MakeSomeNoise
movem.l (a7)+,a0/a1/d2/d6/d7
move.l #Cheese,FacesPtr
move.w #4,Cheese
move.w #-1,FacesCounter
move.b #5,PLR1_GunDamage
st PLR1_GotBigGun
move.w #1,PLR1_GunNoise
move.w #-1,12(a0)
.NotPickedUp:
.NotSameZone:
rts
ItsAKey:
move.w PLR1_xoff,oldx
move.w PLR1_zoff,oldz
move.w PLR1_Zone,d7
cmp.w 12(a0),d7
bne .NotSameZone
move.w (a0),d0
move.l #ObjectPoints,a1
move.w (a1,d0.w*8),newx
move.w 4(a1,d0.w*8),newz
move.l #50*50,d2
bsr CheckHit
tst.b hitwall
beq .NotPickedUp
move.w #0,Noisex
move.w #0,Noisez
move.w #50,Noisevol
move.w #4,Samplenum
move.b #2,chanpick
clr.b notifplaying
movem.l a0/a1/d2/d6/d7,-(a7)
jsr MakeSomeNoise
movem.l (a7)+,a0/a1/d2/d6/d7
move.w #-1,12(a0)
move.b 17(a0),d0
or.b d0,Conditions
move.l #Panel+24*64,a1
move.l #Panel+24*16+14,a2
moveq #0,d1
lsr.b #1,d0
bcs.s .done
addq #2,d1
lsr.b #1,d0
bcs.s .done
addq #2,d1
lsr.b #1,d0
bcs.s .done
addq #2,d1
.done
adda.w d1,a1
adda.w d1,a2
move.w #4,d0
.planes:
move.l a1,a3
move.l a2,a4
moveq #15,d1
.lines
move.w (a3),(a4)
adda.w #24,a3
adda.w #24,a4
dbra d1,.lines
add.l #80*24,a1
add.l #80*24,a2
dbra d0,.planes
.NotPickedUp:
.NotSameZone:
rts
Conditions: dc.w 0
ItsABullet:
tst.b shotsize(a0)
beq.s ItsASmallBullet
bra ItsABigBullet
ItsASmallBullet
move.w 12(a0),d0
blt doneshot
move.l #(256*11*65536)+32,8(a0)
move.w #25*256+25,6(a0)
doneshot:
rts
ItsABigBullet:
move.w 12(a0),d0
blt doneshot
tst.b shotstatus(a0)
beq.s notpopping
move.l #256*7*65536,a1
move.b #12,d0
sub.b shotstatus(a0),d0
btst #0,d0
beq.s nobot
adda.w #32,a1
nobot:
asr.b #1,d0
ext.w d0
asl.w #7,d0
move.l a1,8(a0)
add.w d0,8(a0)
add.w #4*256+4,6(a0)
sub.w #4,4(a0)
sub.b #1,shotstatus(a0)
bgt.s notdonepop
move.w #-1,12(a0)
clr.b shotstatus(a0)
notdonepop:
bra doneshot
notpopping:
move.w #25*256+25,6(a0)
rts
hithit: dc.l 0
putinbackdrop:
move.l a0,-(a7)
move.w angpos,d5
and.w #8191,d5
muls #432,d5
divs #8192,d5
muls #38*2,d5
CACHE_ON d1
move.l frompt,a0
adda.w #104*4,a0
move.l #EndBackPicture,a3
lea.l BackPicture,a1
add.l d5,a1
move.w #2,d4
bra allbars
cnop 0,32
allbars:
move.w #31,d3
onebar:
vertline:
val SET 0
REPT 19
move.l (a1)+,d0
move.w d0,val+104*4(a0)
swap d0
move.w d0,val(a0)
val SET val+104*8
ENDR
cmp.l a3,a1
blt.s notoffrightend
move.l #BackPicture,a1
notoffrightend:
addq #4,a0
dbra d3,onebar
addq #4,a0
dbra d4,allbars
move.l (a7)+,a0
rts